<?php
/**
 * Author: Cy23 QQ:120428037 <cy23@vip.qq.com>
 * Date: 2023-10-27
 * Time: 10:28
 */
namespace addons\prune\controller;

use think\facade\Request;
use think\Image;

class Index
{

    // 图片裁剪，不推荐容易被人利用，真正使用时最好屏蔽此处代码
    // 示例：{:addons_url('prune://Index/prune')}?src={$public}img/loading.png&w=280&h=210&t=3
    // {$public}img/loading.png可替换其他列表地址
    public function prune()
    {
        // 获取图片地址、宽度、高度和裁剪区域参数
        $src = Request::param('src');
        $w = intval(Request::param('w',125)) ?: 1;
        $h = intval(Request::param('h', 125)) ?: 1;
        $t = intval(Request::param('t', 1)) ?: 1;

        /*
            $t的取值：
            1: 等比例缩放类型;
            2: 缩放后填充类型;
            3: 居中裁剪类型;
            4: 左上角裁剪类型;
            5: 右下角裁剪类型;
            6: 固定尺寸缩放类型;
        */
        // 分割文件名和扩展名
        $parts = pathinfo($src);
        // 获取文件名（无扩展名）
        $filename = $parts['filename'];
        // 获取扩展名
        $extension = $parts['extension'];

        // 创建新的文件名，添加宽高和裁剪参数
        $newFilename = "thumb_{$filename}_{$w}_{$h}_{$t}";
        // 重新组合路径
        $thumbPath = '.' . $parts['dirname'] . '/' . $newFilename . '.' . $extension;
        $finfo = finfo_open(FILEINFO_MIME_TYPE);
        $mime_type = finfo_file($finfo, '.'.$src);

        // 加载原始图片
        try {
            if (file_exists($thumbPath)) {
                header("Content-Type: {$mime_type}"); // 根据实际情况替换为正确的MIME类型
                // 直接输出图片文件内容
                readfile($thumbPath);
                exit;
            } else {
                $image = Image::open('.'.$src);
                // 调整图片大小
                $image->thumb($w, $h, $t)->save($thumbPath);
                // 直接输出图片文件内容
                readfile($thumbPath);
                exit;
            }
        } catch (\Exception $e) {
//            dd($e);
            // 捕获 ImageException 异常并进行处理
            echo '图片不存在';
        }
    }
}